/***************************************************************************
 *   Copyright (C) 2007 by Alexandre Masselot,,,   *
 *   alex@alex-laptop   *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU Library General Public License as       *
 *   published by the Free Software Foundation; either version 2 of the    *
 *   License, or (at your option) any later version.                       *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU Library General Public     *
 *   License along with this program; if not, write to the                 *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/
#ifndef BOLPEPTIDESPECTRUMMATCHREADER_H
#define BOLPEPTIDESPECTRUMMATCHREADER_H

#include <fstream>
#include "peptidespectrummatch.h"
#include "peptidemodifier.h"
#include "score/metascoredescriptor.h"

using namespace std;
namespace bol {

/**
virtual class for feeding PeptideSpectrumMatch (from mgf based on header, nIST msp file ...)

	@author Alexandre Masselot,GeneBio,http://www.genebio.com, <alexandre.masselot@gmail.com>
*/
class PeptideSpectrumMatchReader{
  private:
  ifstream *m_inputStream;
  PeptideModifier *m_peptideModifier;

public:
    PeptideSpectrumMatchReader();

    ~PeptideSpectrumMatchReader();
    /**
     * prepare a stream to feed match afterwards
     * @param run the run that will be fed
     * @param filename
     */
    void open(const string& filename);
    
    /**
     * close the current inoput stream
     */
    void close();

    /**
     * read the next input from the stream
     * @return the last inserted soectrum (or NULL if end was reached)
     */
    virtual PeptideSpectrumMatch* nextMatch()=0;

  void setInputStream(ifstream* theValue) {
      m_inputStream = theValue;
  }
  

  ifstream* inputStream() const {
      return m_inputStream;
  }

  void setPeptideModifier(PeptideModifier* theValue) {
      m_peptideModifier = theValue;
  }
  

  PeptideModifier* peptideModifier() const {
      return m_peptideModifier;
  }
  
  

};

}

#endif
